package hu.comicsans;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.image.BufferedImage;

import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
 * Ez az osztály rajzolja ki a játék elemeit egy panelre.
 *
 */
public class Ablak extends JPanel {

	/**
	 * Egy referencia a játék objektumára.
	 */
	public Jatek enJatekom;
	
	/**
	 * A Serializable osztálynak szükséges ez a változó.
	 */
	private static final long serialVersionUID = 8217486295614356841L;

	/**
	 * A pálya paneljének konstruktora, beállítja a panelt a megfelelő méretre.
	 */
	public Ablak()
	{
		setPreferredSize(new Dimension(Jatek.szelesseg, Jatek.magassag));
		setPreferredSize(new Dimension(Jatek.szelesseg, Jatek.magassag));
	}
	
	/**
	 * Felüldefiniáljuk a paintComponent() metódust, és kirajzoljuk az elemeket a pályára.
	 */
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		//erre az objektumra fogunk rajzolni
	    Graphics2D g2d = (Graphics2D) g;
		
	    //fehér legyen a háttérszín
		g2d.setBackground(Color.white);
		
		//újrarajzoljuk az egészet fehérrel
		g2d.clearRect(0, 0, Jatek.szelesseg, Jatek.magassag);	
		
		//kirajzoljuk a hangyákat
		for (Hangya h: enJatekom.palya.hangyaBoly.hangyaLista) {
			g2d.setColor(Color.black);
			
			g2d.fillOval((int) (h.pozicio.x-h.sugar), (int) (h.pozicio.y-h.sugar), (int) h.sugar*2, (int) h.sugar*2);
			
			if (h.vanNalamEtel)
			{
				g2d.setColor(Color.yellow);
				g2d.fillOval((int) (h.pozicio.x) - (int)(h.sugar/2), (int) (h.pozicio.y) - (int)(h.sugar/2), (int) h.sugar, (int) h.sugar);
			}
		}
		
		
		//kirajzoljuk a hangyalesőket
		
		g2d.setColor(Color.cyan);
		
		for (HangyaLeso h: enJatekom.palya.hangyaLesoLista) {
			g2d.fillOval((int) (h.pozicio.x-h.sugar), (int) (h.pozicio.y-h.sugar), (int) h.sugar*2, (int) h.sugar*2);
		}
		
		
		//kirajzoljuk a tócsákat
		
		g2d.setColor(Color.blue);
		
		for (Tocsa t: enJatekom.palya.tocsaLista) {
			g2d.fillOval((int) (t.pozicio.x-t.sugar), (int) (t.pozicio.y-t.sugar), (int) t.sugar*2, (int) t.sugar*2);
		}
		
		//kirajzoljuk a kavicsokat
		
		g2d.setColor(Color.lightGray);
		
		for (Kavics k: enJatekom.palya.kavicsLista) {
			g2d.fillOval((int) (k.pozicio.x-k.sugar), (int) (k.pozicio.y-k.sugar), (int) k.sugar*2, (int) k.sugar*2);
		}
		
		//kirajzoljuk az élelmiszerraktárakat
		
		for (ElelmiszerRaktar r: enJatekom.palya.elelmiszerRaktarLista) {
			
			g2d.setColor(Color.green);
			
			g2d.fillOval((int) (r.pozicio.x-r.sugar), (int) (r.pozicio.y-r.sugar), (int) r.sugar*2, (int) r.sugar*2);
			
			if (r.kiUrult())
			{
				g2d.setColor(Color.red);
				g2d.drawLine((int) (r.pozicio.x-r.sugar), (int) (r.pozicio.y-r.sugar), (int) (r.pozicio.x+r.sugar), (int) (r.pozicio.y+r.sugar));
				g2d.drawLine((int) (r.pozicio.x+r.sugar), (int) (r.pozicio.y-r.sugar), (int) (r.pozicio.x-r.sugar), (int) (r.pozicio.y+r.sugar));
			}
		}
		
		//kirajzoljuk a szagnyomokat
		
		for (SzagNyom s: enJatekom.palya.hangyaBoly.szagNyomLista) {
			
			
			g2d.setColor(new Color(255, (int) (255*(10-s.erosseg)/10.0), (int) (255*(10-s.erosseg)/10.0)));
			
			g2d.fillOval((int) (s.pozicio.x-s.sugar), (int) (s.pozicio.y-s.sugar), (int) s.sugar*2, (int) s.sugar*2);
		}
		
		//kirajzoljuk a hangyabolyt
		
		HangyaBoly hb = enJatekom.palya.hangyaBoly;
		
		g2d.setColor(Color.gray);
		
		g2d.fillOval((int) (hb.pozicio.x-hb.sugar), (int) (hb.pozicio.y-hb.sugar), (int) hb.sugar*2, (int) hb.sugar*2);
		
		//kirajzoljuk a hangyászsünt
		
		HangyaszSun hs = enJatekom.palya.hangyaszSun;
		
		if (hs != null)
		{
			g2d.setColor(new Color(139, 69, 69));
		
			g2d.fillOval((int) (hs.pozicio.x-hs.sugar), (int) (hs.pozicio.y-hs.sugar), (int) hs.sugar*2, (int) hs.sugar*2);
		}
		
		if (enJatekom.szagtalanitoKivalasztva)
		{
			//lekérjük az egér pozícióját
			Point egerPozicio = MouseInfo.getPointerInfo().getLocation();
			
			//átkonvertáljuk a panel koordináta-rendszerére
			SwingUtilities.convertPointFromScreen(egerPozicio, this);
			
			//kirajzoljuk a szagtalanító spray körvonalát
			
			g2d.setColor(new Color(252, 235, 50, 120));
			
			g2d.fillOval((int) (egerPozicio.x-50), (int) (egerPozicio.y-50), (int) 50*2, (int) 50*2);
		}
	
		if (enJatekom.hangyaIrtoKivalasztva)
		{
			//lekérjük az egér pozícióját
			Point egerPozicio = MouseInfo.getPointerInfo().getLocation();
			
			//átkonvertáljuk a panel koordináta-rendszerére
			SwingUtilities.convertPointFromScreen(egerPozicio, this);
			
			//kirajzoljuk a hangyairtó spray körvonalát
			
			g2d.setColor(new Color(152, 235, 50, 120));
			
			g2d.drawOval((int) (egerPozicio.x-50), (int) (egerPozicio.y-50), (int) 50*2, (int) 50*2);
		}
		
		//kirajzoljuk a mérgezett területeket
		
		for (MergezettTerulet mt: enJatekom.hangyaIrtoSpray.mergezettTeruletLista)
		{
			g2d.setColor(new Color(200, 0, 200, 100));
			
			g2d.fillOval((int) (mt.pozicio.x-mt.sugar), (int) (mt.pozicio.y-mt.sugar), (int) mt.sugar*2, (int) mt.sugar*2);
		}
	}	
	
}
